package com.lmf.dao;

import com.lmf.domain.Student;
import com.lmf.vo.QueryParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface StudentDao {
    /**
     * 一个简单类型的参数：
     * 简单类型：mybatis将Java的基本数据类型和string类型，叫做简单类型。（包装类也是简单类型）
     * <p>
     * 在mapper文件中获取简单类型的一个参数值，使用  #{任意字符}  格式获取。
     *
     * @param id
     * @return
     */
    Student selectStudentById(Integer id);

    /**
     * 多个参数：使用命名参数，在形参定义的前面加入 @Param("自定义名称参数")，作为在mapper文件中获取相应参数值的名称.
     *
     * @param name
     * @param age
     * @return
     */
    List<Student> selectMultiParam(@Param(value = "myName") String name,
                                   @Param(value = "myAge") Integer age);

    /**
     * 多个参数-java的属性值，使用java对象作为接口中方法的参数,参数中的类型可以是任意的自定义类
     *
     * @param param
     * @return
     */
    List<Student> selectMultiObject(QueryParam param);

    /**
     * 多个参数-简单类型，按位置传值
     * mybatis.3.4之前，使用 #{0}，#{1};
     * mybatis.3.4之后，使用 #{arg0}，#{arg1};
     *
     * @param name
     * @param age
     * @return
     */
    List<Student> selectMultiPosition(String name, Integer age);

    /**
     * 多个参数-简单类型，使用map集合传值
     * mapper 文件使用 # { key } 引用参数值。
     *
     * @param map
     * @return
     */
    List<Student> selectMultiByMap(Map<String, Object> map);

}
